#ifndef SCANNER_H
#define SCANNER_H

#include <string>
#include <map>
#include <vector>
#include <sstream>
#include "token.h"
#include "types.h"

/* УБРАТЬ МЕТОД getFunctionsIdentTable()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */

        /* лексичний аналізатор */

class Scanner {
    ushort __commentScanner(std::string, uint); // сканер видаляє з тексту програми коментарі
    ushort __stringScanner(std::string, uint); // сканер виділяє з тексту програми строкові літерали
    ushort __digitsScanner(std::string, uint); // сканер виділяє з тексту програми числові літерали
    ushort __identificatorScanner(std::string, uint); // сканер виділяє з тексту програми ідентифікатори (змінні) та ключові слова
    ushort __commonScanner(std::string, uint); // сканер записує в таблицю лексем арифметичні операції
    ushort __spaceScanner(std::string, uint); // видаляє з тексту програми всі символи пробілів та табуляцій
    LanguageKeyWords keywords; // ключові слова мови програмування
    std::map<std::string, std::map<std::string, IdentificatorEntry> > functions_ident_table; // таблиця ідентифікаторів ф-цій
    std::vector<TokenEntry> token_table; // таблиця лексем
public:
    Scanner();
    ushort startScanner(std::string);
    const std::vector<TokenEntry>& getTokenTable() const { return token_table; } // повертає таблицю лексем
    std::map<std::string, std::map<std::string, IdentificatorEntry> >& getFunctionsIdentTable() { return functions_ident_table; }
};

#endif // SCANNER_H
